home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / vidhrdw / cps2.c < prev    next >
C/C++ Source or Header  |  2000-05-13  |  8KB  |  328 lines

  1. /*
  2.  
  3.   Tatty little tile viewer for CPS2 games
  4.  
  5. */
  6.  
  7.  
  8.  
  9. #include "osdepend.h"
  10.  
  11.  
  12. static int cps2_start;
  13. static int cps2_debug;
  14. static int cps2_width;
  15.  
  16. int cps2_gfx_start(void)
  17. {
  18.     UINT32 dwval;
  19.     int size=memory_region_length(REGION_GFX1);
  20.     unsigned char *data = memory_region(REGION_GFX1);
  21.     int i,j,nchar,penusage,gfxsize;
  22.  
  23.     gfxsize=size/4;
  24.  
  25.     /* Set up maximum values */
  26.     cps1_max_char  =(gfxsize/2)/8;
  27.     cps1_max_tile16=(gfxsize/4)/8;
  28.     cps1_max_tile32=(gfxsize/16)/8;
  29.  
  30.     cps1_gfx=malloc(gfxsize*sizeof(UINT32));
  31.     if (!cps1_gfx)
  32.     {
  33.         return -1;
  34.     }
  35.  
  36.     cps1_char_pen_usage=malloc(cps1_max_char*sizeof(int));
  37.     if (!cps1_char_pen_usage)
  38.     {
  39.         return -1;
  40.     }
  41.     memset(cps1_char_pen_usage, 0, cps1_max_char*sizeof(int));
  42.  
  43.     cps1_tile16_pen_usage=malloc(cps1_max_tile16*sizeof(int));
  44.     if (!cps1_tile16_pen_usage)
  45.         return -1;
  46.     memset(cps1_tile16_pen_usage, 0, cps1_max_tile16*sizeof(int));
  47.  
  48.     cps1_tile32_pen_usage=malloc(cps1_max_tile32*sizeof(int));
  49.     if (!cps1_tile32_pen_usage)
  50.     {
  51.         return -1;
  52.     }
  53.     memset(cps1_tile32_pen_usage, 0, cps1_max_tile32*sizeof(int));
  54.  
  55.     {
  56.         for (i=0; i<gfxsize/4; i++)
  57.         {
  58.             nchar=i/8;  /* 8x8 char number */
  59.             dwval=0;
  60.             for (j=0; j<8; j++)
  61.             {
  62.                 int n,mask;
  63.                 n=0;
  64.                 mask=0x80>>j;
  65.                 if (*(data+size/4)&mask)       n|=1;
  66.                 if (*(data+size/4+1)&mask)     n|=2;
  67.                 if (*(data+size/2+size/4)&mask)    n|=4;
  68.                 if (*(data+size/2+size/4+1)&mask)  n|=8;
  69.                 dwval|=n<<(28-j*4);
  70.                 penusage=1<<n;
  71.                 penusage=0xffff;
  72.                 cps1_char_pen_usage[nchar]|=penusage;
  73.                 cps1_tile16_pen_usage[nchar/2]|=penusage;
  74.                 cps1_tile32_pen_usage[nchar/8]|=penusage;
  75.            }
  76.            cps1_gfx[2*i]=dwval;
  77.            dwval=0;
  78.            for (j=0; j<8; j++)
  79.            {
  80.                 int n,mask;
  81.                 n=0;
  82.                 mask=0x80>>j;
  83.                 if (*(data)&mask)      n|=1;
  84.                 if (*(data+1)&mask)    n|=2;
  85.                 if (*(data+size/2)&mask)   n|=4;
  86.                 if (*(data+size/2+1)&mask) n|=8;
  87.                 dwval|=n<<(28-j*4);
  88.                 penusage=1<<n;
  89.                 cps1_char_pen_usage[nchar]|=penusage;
  90.                 cps1_tile16_pen_usage[nchar/2]|=penusage;
  91.                 cps1_tile32_pen_usage[nchar/8]|=penusage;
  92.            }
  93.            cps1_gfx[2*i+1]=dwval;
  94.            data+=4;
  95.         }
  96.  
  97.         data = memory_region(REGION_GFX1)+2;
  98.         for (i=0; i<gfxsize/4; i++)
  99.         {
  100.            nchar=i/8+(gfxsize/4)/8;  /* 8x8 char number */
  101.            dwval=0;
  102.            for (j=0; j<8; j++)
  103.            {
  104.                 int n,mask;
  105.                 n=0;
  106.                 mask=0x80>>j;
  107.                 if (*(data+size/4)&mask)       n|=1;
  108.                 if (*(data+size/4+1)&mask)     n|=2;
  109.                 if (*(data+size/2+size/4)&mask)    n|=4;
  110.                 if (*(data+size/2+size/4+1)&mask)  n|=8;
  111.                 dwval|=n<<(28-j*4);
  112.                 penusage=1<<n;
  113.                 cps1_char_pen_usage[nchar]|=penusage;
  114.                 cps1_tile16_pen_usage[nchar/2]|=penusage;
  115.                 cps1_tile32_pen_usage[nchar/8]|=penusage;
  116.            }
  117.            cps1_gfx[2*(i+gfxsize/4)]=dwval;
  118.            dwval=0;
  119.            for (j=0; j<8; j++)
  120.            {
  121.                 int n,mask;
  122.                 n=0;
  123.                 mask=0x80>>j;
  124.                 if (*(data)&mask)      n|=1;
  125.                 if (*(data+1)&mask)    n|=2;
  126.                 if (*(data+size/2)&mask)   n|=4;
  127.                 if (*(data+size/2+1)&mask) n|=8;
  128.                 dwval|=n<<(28-j*4);
  129.                 penusage=1<<n;
  130.                 cps1_char_pen_usage[nchar]|=penusage;
  131.                 cps1_tile16_pen_usage[nchar/2]|=penusage;
  132.                 cps1_tile32_pen_usage[nchar/8]|=penusage;
  133.            }
  134.            cps1_gfx[2*(i+gfxsize/4)+1]=dwval;
  135.            data+=4;
  136.         }
  137.  
  138.     }
  139.  
  140.     return 0;
  141. }
  142.  
  143.  
  144. int cps2_vh_start(void)
  145. {
  146.     if (cps1_vh_start())
  147.     {
  148.         return -1;
  149.     }
  150.     cps1_gfx_stop();
  151.     cps2_gfx_start();
  152.  
  153.     cps2_start=0;
  154.     cps2_debug=1;    /* Scroll 1 display */
  155.     cps2_width=48;    /* 48 characters wide */
  156.  
  157.     return 0;
  158. }
  159.  
  160. void cps2_vh_stop(void)
  161. {
  162.     cps1_vh_stop();
  163. }
  164.  
  165.  
  166. void cps1_debug_tiles_f(struct osd_bitmap *bitmap, int layer, int width)
  167. {
  168.     int maxy=width/2;
  169.     int x,y;
  170.     int n=cps2_start;
  171.  
  172.     /* Blank screen */
  173.     fillbitmap(bitmap, palette_transparent_pen, NULL);
  174.  
  175.     for (y=0; y<maxy; y++)
  176.     {
  177.         for (x=0;x<width;x++)
  178.         {
  179.             switch (layer)
  180.             {
  181.                 case 1:
  182.                     cps1_draw_scroll1(bitmap, n, 0, 0, 0, 32+x*8, 32+y*8, 0xffff);
  183.                     break;
  184.                 case 2:
  185.                     cps1_draw_tile16(bitmap, Machine->gfx[2], n, 0, 0, 0, 32+x*16, 32+y*16, 0xffff);
  186.                     break;
  187.                 case 3:
  188.                     cps1_draw_tile32(bitmap, Machine->gfx[3], n, 0, 0, 0, 32+x*32, 32+y*32, 0xffff);
  189.                     break;
  190.             }
  191.             n++;
  192.         }
  193.      }
  194.  
  195.      if (keyboard_pressed(KEYCODE_PGDN))
  196.      {
  197.         cps2_start+=width*maxy;
  198.      }
  199.      if (keyboard_pressed(KEYCODE_PGUP))
  200.      {
  201.         cps2_start-=width*maxy;
  202.      }
  203.      if (cps2_start < 0)
  204.      {
  205.         cps2_start=0;
  206.      }
  207. }
  208.  
  209.  
  210. void cps1_debug_tiles(struct osd_bitmap *bitmap)
  211. {
  212.  
  213.     if (keyboard_pressed(KEYCODE_1))
  214.     {
  215.        cps2_debug=1;
  216.        cps2_start=0;
  217.        cps2_width=48;
  218.     }
  219.     if (keyboard_pressed(KEYCODE_2))
  220.     {
  221.        cps2_debug=2;
  222.        cps2_start=0;
  223.        cps2_width=24;
  224.     }
  225.     if (keyboard_pressed(KEYCODE_3))
  226.     {
  227.        cps2_debug=3;
  228.        cps2_start=0;
  229.        cps2_width=12;
  230.     }
  231.  
  232.  
  233.     if (cps2_debug)
  234.     {
  235.         cps1_debug_tiles_f(bitmap, cps2_debug, cps2_width);
  236.     }
  237. }
  238.  
  239. WRITE_HANDLER( cps2_qsound_sharedram_w );
  240.  
  241. void cps2_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh)
  242. {
  243.     static int qcode;
  244.     int stop=0;
  245.     int oldq=qcode;
  246.     int i,offset;
  247.  
  248.     if (cps1_palette)
  249.     {
  250.         for (i=0; i<cps1_palette_size; i+=2)
  251.         {
  252.             int color=0x0fff+((i&0x0f)<<(8+4));
  253.             WRITE_WORD(&cps1_palette[i],color);
  254.         }
  255.     }
  256.  
  257.     /* Get video memory base registers */
  258.     cps1_get_video_base();
  259.  
  260.     cps1_build_palette();
  261.        for (i = offset = 0; i < cps1_palette_entries; i++)
  262.     {
  263.         int j;
  264.         for (j = 0; j < 15; j++)
  265.         {
  266.            palette_used_colors[offset++] = PALETTE_COLOR_USED;
  267.         }
  268.         palette_used_colors[offset++] = PALETTE_COLOR_TRANSPARENT;
  269.     }
  270.  
  271.     palette_recalc ();
  272.  
  273.     cps1_debug_tiles(bitmap);
  274.     if (keyboard_pressed_memory(KEYCODE_UP))
  275.         qcode++;
  276.  
  277.     if (keyboard_pressed_memory(KEYCODE_DOWN))
  278.         qcode--;
  279.  
  280.     qcode &= 0xffff;
  281.  
  282.     if (keyboard_pressed_memory(KEYCODE_ENTER))
  283.         stop=0xff;
  284.  
  285.  
  286.     if (qcode != oldq)
  287.     {
  288.         int mode=0;
  289.         cps2_qsound_sharedram_w(0x1ffa, 0x0088);
  290.         cps2_qsound_sharedram_w(0x1ffe, 0xffff);
  291.  
  292.         cps2_qsound_sharedram_w(0x00, 0x0000);
  293.         cps2_qsound_sharedram_w(0x02, qcode);
  294.         cps2_qsound_sharedram_w(0x06, 0x0000);
  295.         cps2_qsound_sharedram_w(0x08, 0x0000);
  296.         cps2_qsound_sharedram_w(0x0c, mode);
  297.         cps2_qsound_sharedram_w(0x0e, 0x0010);
  298.         cps2_qsound_sharedram_w(0x10, 0x0000);
  299.         cps2_qsound_sharedram_w(0x12, 0x0000);
  300.         cps2_qsound_sharedram_w(0x14, 0x0000);
  301.         cps2_qsound_sharedram_w(0x16, 0x0000);
  302.         cps2_qsound_sharedram_w(0x18, 0x0000);
  303.         cps2_qsound_sharedram_w(0x1e, 0x0000);
  304.     }
  305.     {
  306.     struct DisplayText dt[3];
  307.     char *instructions="PRESS: PGUP/PGDN=CODE  1=8x8  2=16x16  3=32x32  UP/DN=QCODE";
  308.     char text1[256];
  309.     sprintf(text1, "GFX CODE=%06x  :  QSOUND CODE=%04x", cps2_start, qcode );
  310.     dt[0].text = text1;
  311.     dt[0].color = UI_COLOR_INVERSE;
  312.     dt[0].x = (Machine->uiwidth - Machine->uifontwidth * strlen(text1)) / 2;
  313.     dt[0].y = 8*23;
  314.     dt[1].text = instructions;
  315.     dt[1].color = UI_COLOR_NORMAL;
  316.     dt[1].x = (Machine->uiwidth - Machine->uifontwidth * strlen(instructions)) / 2;
  317.     dt[1].y = dt[0].y+2*Machine->uifontheight;
  318.  
  319.     dt[2].text = 0; /* terminate array */
  320.     displaytext(Machine->scrbitmap,dt,0,0);
  321.     }
  322. }
  323.  
  324.  
  325.  
  326.  
  327.  
  328.